#!/usr/bin/env python
# -*- coding:utf-8 -*-
import datetime
from django.shortcuts import redirect
from django.utils.deprecation import MiddlewareMixin
from django.conf import settings

from web import models


class Tracer(object):

    def __init__(self):
        self.user = None
        self.year = None
        self.month = None
        self.day = None


class guser(object):
    def __init__(self):
        self.user = None
        self.year=None
        self.month=None
        self.day=None



class AuthMiddleware(MiddlewareMixin): # 中间键

    def process_request(self, request):
        """ 如果用户已登录，则request中赋值 """

        request.tracer = Tracer()
        request.guser=guser()
        year=datetime.datetime.now().year
        month=datetime.datetime.now().month
        day=datetime.datetime.now().day
        request.guser.year=year
        request.guser.month = month
        request.guser.day = day
        request.tracer.year = year
        request.tracer.month = month
        request.tracer.day = day

        user_mobile_phone = request.session.get('user_mobile_phone', 0) #没有就user_id为0
        # 获取session中的user_id,如果用户登陆了，坑等有，如果没有登陆，就没有
        user_object = models.organization.objects.filter(mobile_phone=user_mobile_phone).first()
        # 在数据库中查一下有没有它，有，就赋值给对象tracer的user
        request.tracer.user = user_object
        guser_object=models.guser.objects.filter(mobile_phone=user_mobile_phone).first() #
        request.guser.user=guser_object

        # 1.获得session，登陆成功已经写入了usr_id标记 浏览器唯一表示：一个字典{【user_id:xxx,code:code】}
        # 2.由写入的id，查数据库，查到了，写到request中，再替换HTML中的模板
        #上面是将用户名写到HTML中，页面上而已



        # 白名单：没有登录都可以访问的URL
        """
        1. 获取当用户访问的URL
        2. 检查URL是否在白名单中，如果再则可以继续向后访问，如果不在则进行判断是否已登录
        """
        # request.path_info获取当前的url
        # 如果在这个里面就不执行下面的 return默认为null 如果为null，则这个中间键通过了
        if request.path_info in settings.DDDLLL : # 全部登陆位登陆都可以访问的
            return #通过

        if request.path_info in settings.WHITE_REGEX_URL_LIST:  # 登陆的不可以放访问的，没有登陆的可以访问 ，这个以外的没有登陆的都不能访问
            if request.tracer.user or request.guser.user:
                return redirect("/")
            else:
                return
        if request.tracer.user or request.guser.user:  # 过了没有登陆的人
                    # 过了上面的就是已经登陆的了
                    if request.path_info in settings.ORGAN_ALL:  # 登陆的不可以放访问的，没有登陆的可以访问 ，这个以外的没有登陆的都不能访问
                        if request.tracer.user:
                            return  # 通过
                        else:
                            return redirect("/")  # 不通过

                    if request.path_info in settings.GUERS:  # 登陆的不可以放访问的，没有登陆的可以访问 ，这个以外的没有登陆的都不能访问
                        if request.guser.user:
                            return  # 通过
                        else:
                            return redirect("/")  # 不通过
        else:
                    return redirect("/web/login/")



